package pos.data;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;

import com.mysql.jdbc.PreparedStatement;

import pos.domain.Vivienda;

public class JDBCViviendaDAO implements IViviendaDAO{
	public JDBCViviendaDAO(){}
	@Override
	public void delete(Connection conn, String VOID) {
		String sql="DELETE FROM Vivienda WHERE (OID=?)";
		PreparedStatement stmt=null;
		
		try{
			stmt=(PreparedStatement) conn.prepareStatement(sql);
			stmt.setString(1, VOID);
			stmt.executeUpdate();
		}catch(SQLException e){
			System.out.print("se ha producido un error en la base de datos");
		}finally {
            try {
                if (stmt != null)
                    stmt.close();
            } catch (SQLException e) {
            }	
		}
	}

	@Override
	public void insert(Connection conn, String VOID,Vivienda v) {
		PreparedStatement stmt = null;
		String sql="INSERT INTO Vivienda (OID,direccion,codigo_postal,poblacion,iD_usuario,coche,descripcion,pais,ciudad)VALUES (?,?,?,?,?,?,?,?,?)";
		try{
			stmt=(PreparedStatement) conn.prepareStatement(sql);
			stmt.setString(1,VOID);
			stmt.setString(2, v.getDireccion());
			stmt.setInt(3,v.getCodigoPostal() );
			stmt.setString(4, v.getPoblacion());
			stmt.setString(5, v.getPropietario());
			stmt.setBoolean(6, v.getCoche());
			stmt.setString(7, v.getDescripcion());
			stmt.setString(8, v.getPais());
			stmt.setString(9, v.getCiudad());
			
			stmt.executeUpdate();
			
		}catch(SQLException e){
			System.out.print("se ha producido un error en la conexion a la base de datos");
		}finally{
			try {
                if (stmt != null) {
                    stmt.close();
                }
            } catch (SQLException e) {
            }
		}
		
	}


	
	
	@Override
	public Vivienda select(Connection conn, String VOID) {
		PreparedStatement stmt=null;
		ResultSet result=null;
		Vivienda v=null;
		String sql="SELECT * FROM Vivienda WHERE (OID = ?)";
		try{
			stmt = (PreparedStatement) conn.prepareStatement(sql);
            stmt.setString(1, VOID);
            result = stmt.executeQuery();
            result.next();
            v=new Vivienda();
            v.setCiudad(result.getString("ciudad"));
            v.setCoche(result.getBoolean("coche"));
            v.setCodigoPostal(result.getInt("codigo_postal"));
            v.setDescripcion(result.getString("descripcion"));
            v.setDireccion(result.getString("direccion"));
            v.setPais(result.getString("pais"));
            v.setPoblacion(result.getString("poblacion"));
            v.setPropietario(result.getString("iD_usuario"));
            v.setOID(result.getString("OID"));
        }catch (SQLException e){
			System.out.print("se ha producido un error al conectar con la base de datos");
		}finally{
			try {
                if (result != null) {
                    result.close();
                }
                if (stmt != null) {
                    stmt.close();
                }
            } catch (SQLException e) {
            }
		}
		
		return v;
	}

	
	
	@Override
	public List<Vivienda> selectAllViviendas() {
		Connection conn=ConnectionManager.getInstance().checkOut();
		PreparedStatement stmt=null;
		List<Vivienda> searchResults=new LinkedList<Vivienda>();
		ResultSet result=null;
		try{
			String sql="SELECT * FROM Vivienda";
			stmt=(PreparedStatement) conn.prepareStatement(sql);
			stmt.executeQuery();
			result = stmt.executeQuery();
			while(result.next()){
				Vivienda temp=new Vivienda();
				temp.setCiudad(result.getString("Ciudad"));
	            temp.setCoche(result.getBoolean("Coche"));
	            temp.setCodigoPostal(result.getInt("Codigo_postal"));
	            temp.setDescripcion(result.getString("Descripcion"));
	            temp.setDireccion(result.getString("Direccion"));
	            temp.setPais(result.getString("Pais"));
	            temp.setPoblacion(result.getString("Poblacion"));
	            temp.setPropietario(result.getString("ID_usuario"));
	            temp.setOID(result.getString("OID"));
	            searchResults.add(temp);
			}
		}catch(SQLException e){
			System.out.print("Se ha producido un error en la base de datos");
		}finally{
			ConnectionManager.getInstance().checkIn(conn);
			try{
				if(result!=null)
					result.close();
				if(stmt!=null){
					stmt.close();
				}
			}catch(SQLException e){
			}
			
		}
		return searchResults;
	}

}
